﻿// Inner Fire 游戏引擎库
// ColliderWorld - 碰撞世界
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 所属层级：应用层（4）
// 用于统计管理碰撞。这里面只涉及碰撞的触发，而不涉及物理的项目
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-07-24

#include "collider_world.h"
#include <game/object/game_object.h>
#include <klog.h>

namespace ifire::game {

ColliderWorld::ColliderWorld(Scene& scene, ikit::sstr _name)
    : scene_(scene), name(_name) {}

ColliderWorld::~ColliderWorld() {}

void ColliderWorld::FixedUpdate(float delta_time) {}

void ColliderWorld::LateUpdate(float delta_time) {}

void ColliderWorld::Collide(Collider* collider) {
  // 碰撞体信息
  CollideResult result;

  for (auto i : colliders_) {
    // 跳过无效项目，跳过自身，跳过不是对象Mask
    if (!i->IsEnable()) continue;
    if (i == collider) continue;
    if (!i->IsLayer(collider->mask_)) continue;

    // 进行一次碰撞检查
    if (collider->Collide(i, result)) {
      collider->AddResult(result);
    }
  }
}

void ColliderWorld::Add(Collider* collider) { colliders_.push_back(collider); }

} // namespace ifire::game